#ifndef UTILIZADOR_H_
#define UTILIZADOR_H_

#include <string>
#include <vector>
#include <iostream>

class Cidade;
class Lugar;

class Utilizador {
	friend std::ostream& operator<<(std::ostream& output, const Utilizador& utilizador);
private:
	std::string nickname;
	std::string email;
	std::vector<Utilizador*> pedidosAmizade;
	std::vector<Utilizador*> amigos;
	std::vector<Cidade*> checkins;
	Cidade* lastCheckin;
	Lugar* local;
	int pontos;

public:
	Utilizador();
	Utilizador(const std::string nickname);
	Utilizador(const std::string nickname, const std::string email);
	Utilizador(const std::string nickname, const std::string email, Lugar* local);
	virtual ~Utilizador();

	std::string getNickname() const;
	std::string getEmail() const;
	Lugar* getLocal() const;
	int getPontos() const;
	int getNumeroAmigos() const;
	int getNumeroPedidosAmizade() const;
	bool adicionarAmigo(Utilizador* utilizador);
	void enviarPedidoAmizade(Utilizador* utilizador);
	bool aceitarPedidoAmizade(Utilizador* utilizador);
	bool recusarPedidoAmizade(Utilizador* utilizador);
	void removerAmigo(Utilizador* utilizador);
	bool checkIn(Cidade* cidade);

	const Utilizador& operator =(const Utilizador& user);
	bool operator ==(const Utilizador& user) const;
	bool operator >(const Utilizador& user) const;
};

#endif /* UTILIZADOR_H_ */
